]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Deal with unknown flags from ClutterEvent.get_state()
authorOwen W. Taylor <otaylor@fishsoup.net>
Wed, 7 Oct 2009 21:20:33 +0000 (17:20 -0400)
committerOwen W. Taylor <otaylor@fishsoup.net>
Wed, 7 Oct 2009 21:22:37 +0000 (17:22 -0400)
When we get a ClutterModifierType from Clutter, it might contain
bits not in the enumeration. See bug 59771 for a similar problem
with GdkModifierType.

Add a wrapper Shell.get_event_state() around clutter_event_get_state()
to mask these bits out and only return approved bits.

https://bugzilla.gnome.org/show_bug.cgi?id=597735

js/ui/altTab.js
js/ui/appDisplay.js
js/ui/main.js
src/shell-global.c
src/shell-global.h

index a437313553a41ff62de30c0020d26f10731ef428..90e7562ce44f42e8b7cd98f8a47a5ed2628649a6 100644 (file)
@@ -148,7 +148,7 @@ AltTabPopup.prototype = {
 
     _keyPressEvent : function(actor, event) {
         let keysym = event.get_key_symbol();
-        let shift = (event.get_state() & Clutter.ModifierType.SHIFT_MASK);
+        let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
 
         // The WASD stuff is for debugging in Xephyr, where the arrow
         // keys aren't mapped correctly
index f114b519df53d55b5d7c257a55dba01595a0500b..e24ffc2ba68709174dea34a5073d8e5fb53d30d3 100644 (file)
@@ -554,7 +554,7 @@ RunningWellItem.prototype = {
     },
 
     _onActivate: function (actor, event) {
-        let modifiers = event.get_state();
+        let modifiers = Shell.get_event_state(event);
 
         if (modifiers & Clutter.ModifierType.CONTROL_MASK) {
             this.appInfo.launch();
index 2a0d73bf8a40b222eafda768399733918564c131..62358469238cf3d99dedcf83521585e5a94ad63a 100644 (file)
@@ -201,7 +201,7 @@ function _globalKeyPressHandler(actor, event) {
                 overview.hide();
 
             return true;
-        } else if (symbol == Clutter.F2 && (event.get_state() & Clutter.ModifierType.MOD1_MASK)) {
+        } else if (symbol == Clutter.F2 && (Shell.get_event_state(event) & Clutter.ModifierType.MOD1_MASK)) {
             getRunDialog().open();
         }
     }
index 65688e7289b7de0a655ae29b8ddd71462208aa0b..bad17065c309e70b77f4e4241d6491bfe7ad72b5 100644 (file)
@@ -998,3 +998,22 @@ shell_global_get_modifier_keys (ShellGlobal *global)
   gdk_display_get_pointer (gdk_display_get_default (), NULL, NULL, NULL, &mods);
   return mods & GDK_MODIFIER_MASK;
 }
+
+/**
+ * shell_get_event_state:
+ * @event: a #ClutterEvent
+ *
+ * Gets the current state of the event (the set of modifier keys that
+ * are pressed down). Thhis is a wrapper around
+ * clutter_event_get_state() that strips out any un-declared modifier
+ * flags, to make gjs happy; see
+ * https://bugzilla.gnome.org/show_bug.cgi?id=597292.
+ *
+ * Return value: the state from the event
+ */
+ClutterModifierType
+shell_get_event_state (ClutterEvent *event)
+{
+  ClutterModifierType state = clutter_event_get_state (event);
+  return state & CLUTTER_MODIFIER_MASK;
+}
index fe01aeb3d27f904b208683ec279835c912af2bf9..d081cffbaf4d5b6ebaddf121e76e96ea45e019bd 100644 (file)
@@ -79,6 +79,8 @@ GdkRectangle *shell_global_get_focus_monitor   (ShellGlobal  *global);
 
 GdkModifierType shell_global_get_modifier_keys (ShellGlobal *global);
 
+ClutterModifierType shell_get_event_state (ClutterEvent *event);
+
 G_END_DECLS
 
 #endif /* __SHELL_GLOBAL_H__ */